#ifndef __CLASS_MATRIXF_H
#define __CLASS_MATRIXF_H
#include "head.h"
class matrixf_
{
	public:
   int no_pool; //This is a special used sign. It means that the pool number that matrix is stored

   int rows;      //The number of rows of the matrix.
   int columns;    //the number of columns of this matrix.
   FLOAT *array;   //the array used to store the complex entries of the matrix.
   
     
   matrixf_()
	{
		rows=0;
   	columns=0;
   	array=NULL;
	};
   matrixf_(int row,int column);
   matrixf_ operator=(const FLOAT &a);
   friend matrixf_ H(const matrixf_ &m);
   friend matrixf_ T(const matrixf_ &m);
   matrixf_ slice(int row1,int col1,int row2,int col2);
   friend matrixf_ slice(const matrixf_ &m1,int row1,int col1,int row2,int col2);
   
   friend matrixf_ operator*(FLOAT x,const matrixf_ &m1);
   matrixf_ invert(float Er);
   friend matrixf_ compose(matrixf_ &m1,matrixf_ &m2,int select);
   friend matrixf_ operator-(matrixf_ &m);
   friend matrixf_ operator+(matrixf_ &m);
   friend matrixf_ conjugate(matrixf_ &m);
   matrixf_  compose(matrixf_ &m2,int select);
   operator FLOAT *();
   matrixf_ multi(const matrixf_ &a);
   friend float abs_matrix(matrixf_ &m);
   void conjugate();
   void output();
   ~matrixf_()
   {
   	
      //delete array;
   }
};

#endif